package com.xxxt.utils;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public class DateUtil {

	public final static String sqlDateFormat="%y-%m-%d";
	public final static String sqlDateTimeFormat="%y-%m-%d %T";

	public final static String DateFormat="yyyy-MM-dd";
	public final static String DateTimeFormat="yyyy-MM-dd HH:mm:ss";
	public final static String SimpleDateTimeFormat="yyyy-MM-dd HH:mm";
	/*
	 * 获取当前系统时间，并且转换成String类型
	 */
	public static String  getDate(){
		Date date = new Date();
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		String createdate = sdf.format(date);
		return createdate;
	}

	/**
	 * date比较方法 yyyy-MM-dd HH:mm:ss
	 * @param date1 日期1
	 * @param date2 日期2
	 * @return
	 * @throws ParseException 
	 */
	public static boolean isDateCompare(String date1,String date2) throws ParseException{
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
		Date sd1=df.parse(date1);
		Date sd2=df.parse(date2);
		return sd1.before(sd2);
	}
	
	/**
	 * date比较方法 yyyy-MM-dd 模糊比较
	 * @param date1 日期1
	 * @param date2 日期2
	 * @return
	 * @throws ParseException 
	 */
	public static boolean isDateCompare2(String date1,String date2) throws ParseException{
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		Date sd1=df.parse(date1);
		Date sd2=df.parse(date2);
		
		int i = sd1.compareTo(sd2); 
		return i<=0;
	}
	
	/**
	 * date比较方法 yyyy-MM-dd 是否相等
	 * @param date1 日期1
	 * @param date2 日期2
	 * @return
	 * @throws ParseException 
	 */
	public static boolean isDateCompare3(String date1,String date2) throws ParseException{
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		Date sd1=df.parse(date1);
		Date sd2=df.parse(date2);
		
		int i = sd1.compareTo(sd2); 
		return i==0;
	}
	
	/**
	 * 获取当前日期和时间的文本描述 yyyy-MM-dd HH:mm:ss
	 * @return 当前时间格式化的描述
	 * @throws ParseException 
	 */
	public static Date getCurrentDateTime() throws ParseException {
		Date date = new Date();
        String str = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        return sdf.parse(sdf.format(date));
	}
	/**
	 * 获取当前日期和时间的文本描述 yyyy-MM-dd HH:mm:ss
	 * @return 当前时间格式化的描述
	 * @throws ParseException 
	 */
	public static String getCurrentDTime() {
		Date date = new Date();
        String str = "yyyy-MM-dd HH:mm:ss";
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        return sdf.format(date);
	}

	/**
	 * 获取当前日期和时间的文本描述 yyyy-MM-dd
	 * @return 当前时间格式化的描述
	 * @throws ParseException
	 */
	public static Date getCurrentDate() throws ParseException {
		Date date = new Date();
        String str = "yyyy-MM-dd";
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        return sdf.parse(sdf.format(date));
	}
	/**
	 * 获取当前日期的文本描述 yyyy-MM-dd
	 * @return 当前时间格式化的描述
	 * @throws ParseException
	 */
	public static String getCurrentDateText() {
		Date date = new Date();
        String str = "yyyy-MM-dd";
        SimpleDateFormat sdf = new SimpleDateFormat(str);
        return sdf.format(date);
	}
	
	/**<p>Description: 将格式化的日期文本的日期加上指定天数，可以为负数</p>
	 * @author 蓝伟格  @date 2020-02-25 15:10:02 
	 * @throws ParseException */
	public static String DateAddDays(String date, int count) throws ParseException {
             SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
             Date sDate = sdf.parse(date);
             Calendar c = Calendar.getInstance();  
             c.setTime(sDate);  
             c.add(Calendar.DATE, count);
             sDate = c.getTime();
             return sdf.format(sDate);
	}
	public static Date DateAddDays(Date date, int count) {
        Calendar c = Calendar.getInstance();  
        c.setTime(date);  
        c.add(Calendar.DATE, count);
        return c.getTime();
	}
	/**<p>Description: 将格式化的日期文本的日期加上指定分钟，可以为负数</p>
	 * @author 蓝伟格  @date 2020-02-25 15:10:02 
	 * @throws ParseException */
	public static String DateAddMinutes(String date, int count) throws ParseException {
             SimpleDateFormat sdf = new SimpleDateFormat(DateTimeFormat);
             Date sDate = sdf.parse(date);
             Calendar c = Calendar.getInstance();  
             c.setTime(sDate);  
             c.add(Calendar.MINUTE, count);
             sDate = c.getTime();
             return sdf.format(sDate);
	}
	/**<p>Description: 将格式化的日期文本的日期时间加上指定天数，可以为负数</p>
	 * @author 蓝伟格  @date 2020-02-25 15:10:02 
	 * @throws ParseException */
	public static String DTimeAddDays(String date, int count) throws ParseException {
             SimpleDateFormat sdf = new SimpleDateFormat(DateTimeFormat);
             Date sDate = sdf.parse(date);
             Calendar c = Calendar.getInstance();  
             c.setTime(sDate);  
             c.add(Calendar.DATE, count);
             sDate = c.getTime();
             return sdf.format(sDate);
	}
	/**<p>Description: 获取昨天的日期的文本描述</p>
	 * @author 蓝伟格  @date 2020-02-25 15:10:02 
	 * @throws ParseException */
	public static String getYesterdayDate() {
			Date date = new Date();
             Calendar c = Calendar.getInstance();  
             c.setTime(date);  
             c.add(Calendar.DATE, -1);
             date = c.getTime();
             SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
             return sdf.format(date);
	}
	
	/**
	 * 获取当前日期和时间的文本描述,按str格式化
	 * @author mopeiwen
	 * @param str
	 * @return
	 * @throws ParseException
	 */
	public static String getCurrentTime(String str) throws ParseException {
		 return new SimpleDateFormat(str).format(new Date(System.currentTimeMillis()));
	}
	
	/**<p>Description: 校验日期数据格式</p>
	 * @author 蓝伟格  @date 2020-02-26 14:24:02 */
	public static boolean isValidDate(String dateText) {
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        sdf.setLenient(false);
        try {
			sdf.parse(dateText);
		} catch (ParseException e) {
			return false;
		}
        return true;
	}
	/**<p>Description: 校验日期数据格式</p>
	 * @author 蓝伟格  @date 2020-02-26 14:24:02 */
	public static boolean isValidSimpleDateTime(String dateText) {
        SimpleDateFormat sdf = new SimpleDateFormat(SimpleDateTimeFormat);
        sdf.setLenient(false);
        try {
			sdf.parse(dateText);
		} catch (ParseException e) {
			return false;
		}
        return true;
	}
	
	/**<p>Description: 将斜杠分隔日期的日期格式转换为当前项目使用的分隔风格</p>
	 * @author 蓝伟格  @date 2020-02-25 21:04:17 */
	public static String convertFormatToCurr(String dateText) {
		return dateText.replace("/", ":");
	}
	/**<p>Description: 将项目默认的日期格式转换为指定的日期格式（会忽略掉时间部分）</p>
	 * @author 蓝伟格  @date 2020-02-25 21:04:17 
	 * @throws ParseException */
	public static String convertFormat(String dateText, String format) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        SimpleDateFormat targetSdf = new SimpleDateFormat(format);
        return targetSdf.format(sdf.parse(dateText));
	}
	public static Date parseToDate(String dateText) throws ParseException {
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        return sdf.parse(dateText);
	}
	public static String format(Date date) {
        SimpleDateFormat sdf = new SimpleDateFormat(DateFormat);
        return sdf.format(date);
	}

}
